package cn.tedu._05article.base.exception;

import cn.tedu._05article.base.response.JsonResult;
import cn.tedu._05article.base.response.StatusCode;
import jakarta.validation.ConstraintViolationException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * ControllerAdvice注解：
 *   1.标识该类为全局异常处理器的类
 *   2.当抛出异常时，Spring MVC会检查是否有对应的全局异常处理器的类
 *
 * RestControllerAdvice注解：
 *   1.组合注解：@ControllerAdvice + @ResponseBody
 */

@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {
    //ExceptionHandler注解：表识该方法为异常处理方法
    @ExceptionHandler
    public JsonResult doHandleMethodArgumentNotValidException(MethodArgumentNotValidException ex) {
        String data = ex.getFieldError().getDefaultMessage();
        log.error("MethodArgumentNotValidException:" + data);

        return new JsonResult(StatusCode.VALIDATED_ERROR, data);
    }
}
